# 现有一个房间，墙上挂有n只已经打开的灯泡和 4 个按钮。在进行了m次未知操作后，你需要返回这n只灯泡可能有多少种不同的状态。
#
# 假设这 n 只灯泡被编号为 [1, 2, 3 ..., n]，这 4 个按钮的功能如下：
#
# 将所有灯泡的状态反转（即开变为关，关变为开）
# 将编号为偶数的灯泡的状态反转
# 将编号为奇数的灯泡的状态反转
# 将编号为 3k+1 的灯泡的状态反转（k = 0, 1, 2, ...)
#
# 来源：力扣（LeetCode）
# 链接：https://leetcode-cn.com/problems/bulb-switcher-ii
# 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
class Solution:
    def flipLights(self, n: int, m: int) -> int:
        # 可以把所有情况都找出来
        n = min(n, 3)
        if m == 0:
            return 1
        if m == 1:
            return [2, 3, 4][n - 1]
        if m == 2:
            return [2, 4, 7][n - 1]
        return [2, 4, 8][n - 1]


if __name__ == '__main__':
    sol = Solution()
    print(sol.flipLights(5, 4))
